Дано n целых чисел. Найдите
максимальное значение НОД (наибольшего общего делителя) среди всех пар этих
чисел.
Вход. Первая строка содержит количество
тестов t (1 ≤ t ≤ 100).
Следующие t строк представляют собой t тестов. Каждый тест содержит n (1 ≤ n ≤ 100) натуральных чисел.
Выход. Для каждого теста в отдельной
строке выведите максимальное значение НОД среди всех возможных пар
чисел.
Пример
входа |
Пример
выхода |
3 10 20 30 40 7 5 12 125 15 25 |
20 1 25 |
НОД
Анализ алгоритма
Прочитаем все
числа для каждого теста в массив m. Далее переберем все пары чисел mi и mj (i < j) и найдем
наибольшее значение среди НОД(mi, mj).
Пример
Для первого
теста максимум достигается на паре НОД(20, 40) = 20.
Во втором тесте
все числа являются взаимно простыми.
Для третьего
теста максимум достигается на паре НОД(125, 25) = 25.
Реализация алгоритма
Читаем количество
тестов tests.
scanf("%d", &tests);
while (tests--)
{
Обрабатываем очередной тест. Все числа теста читаем в массив m.
m.clear();
После каждого числа x читаем следующий символ ch. Как только ch станет равным ‘\n’, завершаем
цикл.
while (scanf("%d%c", &x, &ch), ch != '\n')
m.push_back(x);
При этом не забываем занести последнее прочитанное значение x в массив m.
m.push_back(x);
Перебираем пары чисел mi и mj (i < j). Находим
максимум среди НОД(mi, mj).
res = 1;
for (i = 0; i < m.size(); i++)
for (j = i + 1; j < m.size(); j++)
res = max(res, gcd(m[i], m[j]));
Выводим ответ.
printf("%d\n", res);
}